package com.dingding.nettyserver.core.config;

import com.dingding.nettyserver.core.util.Prop;
import com.dingding.nettyserver.core.util.PropKit;

import io.netty.handler.timeout.IdleState;

/**
 * @Description 服务器端相关的常量和参数
 * @author fengshuonan
 * @date 2016年11月18日 上午10:31:46
 */
public class ServerConfig {

	/**
	 * 服务器的端口号
	 */
	public final int SERVER_PORT;
	
	/**
	 * 触发{@link IdleState#READER_IDLE}事件的时间,单位：秒
	 */
	public final int READ_IDLE_SECONDS;
	
	/**
	 * 触发{@link IdleState#WRITER_IDLE}事件的时间,单位：秒
	 */
	public final int WRITER_IDLE_SECONDS;
	
	/**
	 * 触发{@link IdleState#ALL_IDLE}事件的时间,单位：秒
	 */
	public final int ALL_IDLE_SECONDS;
	
	/**
	 * BACKLOG用于构造服务端套接字ServerSocket对象，标识当服务器请求处理线程全满时
	 * 用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1
     * Java将使用默认值50
	 */
	public final int SO_BACKLOG;

	private static ServerConfig serverConst = new ServerConfig();

	private ServerConfig() {
		Prop prop = PropKit.use("server.properties");
		this.SERVER_PORT = prop.getInt("server.port");
		this.READ_IDLE_SECONDS = prop.getInt("server.readIdelSeconds");
		this.WRITER_IDLE_SECONDS = prop.getInt("server.writeIdelSeconds");
		this.ALL_IDLE_SECONDS = prop.getInt("server.allIdelSeconds");
		this.SO_BACKLOG = prop.getInt("server.backLog");
	}

	public static ServerConfig me() {
		return serverConst;
	}
}
